package com.yqh;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 集合的并发修改异常
 *
 * @author 阳秋豪
 * @createTime 2024/3/6
 */
public class Test1 {
    public static void main(String[] args) {
        // 1、问题：什么是集合的并发修改异常？
        // 答：使用迭代器遍历集合时，又同时在删除集合中的数据，程序就会出现并发修改异常的错误。

        // 2、需求：在集合中找到姓张的人并从集合中删除
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("张六");
        System.out.println(list); // [张三, 李四, 王五, 张六]
        /*Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String name = iterator.next(); // 发生异常 Exception in thread "main" java.util.ConcurrentModificationException
            if (name.contains("张")) {
                list.remove(name);
            }
        }
        System.out.println(list);*/
        // 怎么解决呢？
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String name = iterator.next();
            if (name.contains("张")) {
                iterator.remove(); // 删除迭代器当前遍历到的数据，每删除一个数据后，相当于也在底层做了i--
            }
        }
        System.out.println(list); // [李四, 王五]

        // 3、注意：使用增强 for 循环遍历集合并删除数据，没有办法解决集合的并发修改异常（forEach 方法也有此问题）
    }
}
